Veri Tabanı Yönetim Sistemleri II Ders notu
--- JOIN işlemleri ---
1. INNER JOIN
INNER JOIN, iki veya daha fazla tablodaki ortak alanlarda eşleşen kayıtları getirir. Bu
komut, yalnızca her iki tabloda da bulunan (yani, eşleşen) verileri döndürür. Yani, bir
tablodaki değer bir diğer tabloda bulunmuyorsa, o satır sonuçta yer almaz.
Kullanım Mantığı:
INNER JOIN, yalnızca "kesişim kümesi"ne odaklanır; yani, yalnızca her iki tabloda da
bulunan satırlar sorgu sonucuna dahil edilir. Bu, ilişkili verilere dayalı birleştirmeleri
sağlar.
Örnek:
İki tablomuz olsun: Musteriler ve Satislar. Bu tablolarda, müşteri bilgileri ve
yapılan satışlar yer almakta.
Örneğin, her iki tabloda da id alanı üzerinden birleştirme yapılabilir.
SELECT * FROM Musteriler
INNER JOIN Satislar ON Musteriler.id = Satislar.id;
çıktı:
Bu komut ile, sadece her iki tabloda da yer alan müşteri ve satış bilgileri gösterilecektir.
Eğer bir müşteri, satış tablosunda yer almıyorsa, o müşteri verisi sonuçlarda yer almaz.
Özetle:
Avantajı: Gereksiz verilerden kaçınılır.
Dezavantajı: Eşleşmeyen veriler atılır, dolayısıyla eksik bilgi elde edilebilir.
2. LEFT JOIN (veya LEFT OUTER JOIN)
LEFT JOIN, sol tablodaki tüm verileri alır ve sağ tablodaki eşleşen verileri döndürür.
Sağ tablodaki eşleşmeyen veriler için NULL döndürülür. Bu, sol tablodaki her kayıt için,
sağ tablodan mümkünse bir eşleşme getirir. Eğer sağ tabloda eşleşen bir kayıt yoksa,
yine sol tablodaki tüm veriler döndürülür, ancak sağ tablodan gelen bilgiler NULL olur.
Kullanım Mantığı:
Sol tablodaki verilerin kaybolmamasını sağlayan JOIN türüdür. Eğer sağ tablodan
eşleşen bir satır yoksa, NULL değeri döndürülür.
Örnek: Aynı kitaplar ve yazarlar tablosuyla örnek verecek olursak, tüm kitaplar ve
eşleşen yazarları almak için LEFT JOIN kullanılabilir:
SELECT kitaplar.kitap_isim, yazarlar.yazar_isim
FROM kitaplar
LEFT JOIN yazarlar ON kitaplar.yazarid = yazarlar.id;
çıktı:
• LEFT JOIN soldaki tablonun tamamını alır ve diğer tablodaki ilişkili verileri döndürür.
Eğer kitaplar tablosundaki bir kitap için yazar bilgisi yoksa, yine kitap adı döner ancak
yazar_isim NULL olur.
Özetle:
Avantajı: Sol tablodaki verilerin kaybolmaması sağlanır.
Dezavantajı: Sağ tabloda eşleşmeyen verilerde NULL döndürülmesi, veri
eksikliğine yol açabilir.
3. RIGHT JOIN (veya RIGHT OUTER JOIN)
RIGHT JOIN, LEFT JOIN ile hemen hemen aynıdır, ancak bu sefer sağ tablodaki tüm
kayıtları döndürür. Eğer sol tabloda eşleşen bir kayıt yoksa, sol tablodan gelen değerler
NULL olarak döner.
Kullanım Mantığı:
Sağ tablodaki tüm veriler gösterilir. Sol tablodan yalnızca sağ tabloyla eşleşenler gelir.
Sağ tablodan eşleşmeyen kayıtlar yine NULL olarak gösterilir.
Örnek: kitaplar ve yazarlar diye iki tablomuz mevcut
SELECT kitaplar.kitap_isim, yazarlar.yazar_isim
FROM kitaplar
RIGHT JOIN yazarlar ON kitaplar.yazarid = yazarlar.id;
çıktı:
• Göldüğü gibi sağda yer alan yazarlar tablosunun tamamını sonuç olarak aldı ve
yazara karşılık gelen bir kitap bulunmadıysa ilgili alanın değerini “null” olarak atadı.
Burada, tüm yazarlar listelenir ve her yazarın kitabı varsa, kitap adı da döndürülür. Eğer
bir yazarın kitabı yoksa, kitap adı NULL olur.
Özetle:
Avantajı: Sağ tablodaki verilerin kaybolmaması sağlanır.
Dezavantajı: Sol tabloda eşleşmeyen veriler NULL olur.
4. FULL JOIN (veya FULL OUTER JOIN)
FULL OUTER JOIN, SQL'de iki tablonun tüm verilerini birleştirirken hem sağdaki hem
de soldaki tablodan gelen tüm kayıtları alır. Eğer sağdaki veya soldaki tablodan
eşleşmeyen bir kayıt varsa, o satırda ilgili tablo için NULL değeri döner.
Kullanım Mantığı:
Her iki tablodan da tüm veriler gösterilir: Eşleşen kayıtlar birleştirilir, ancak
eşleşmeyen kayıtlar için diğer tablodan NULL değerleri gösterilir.
Sağdaki ve soldaki tablodan veriler: Eşleşmeyen satırlar NULL değerleri ile
gösterili
Örnek: kitaplar ve yazarlar diye iki tablomuz mevcut
SELECT * FROM kitaplar FULL JOIN OUTER yazarlar
ON kitaplar.id = yazarlar.id;
çıktı:
FULL OUTER JOIN komutuyla yapılan sorgu sonucunda, her iki tablodaki tüm veriler
alınmıştır. Görüldüğü gibi, sağda yer alan yazarlar tablosunun tamamı sonuç olarak
alınmıştır ve bir yazara karşılık gelen bir kitap bulunmadığı takdirde, o yazara ait tüm
kitap bilgileri NULL olarak atanmıştır.
Sonuçta, FULL OUTER JOIN kullanıldığında, her iki tablonun tüm verilerini almak
mümkün olur. Eşleşmeyen kayıtlar NULL olarak döndürülür.
5. UNION
UNION, iki veya daha fazla SELECT komutunun sonuçlarını birleştirir. Ancak,
birleştirilen sonuçlar tekrarsız olmalıdır. Yani, aynı veriler yalnızca bir kez döndürülür.
UNION ALL komutuyla ise tekrar eden veriler de dahil edilir.
Kullanım Mantığı:
Birleştirilen SELECT komutlarının her birinin aynı sayıda sütun içermesi ve her sütunun
aynı veri tipinde olması gerekir.
Örnek:
Personel ve Musteriler tablosundaki şehir verilerini birleştirelim:
SELECT Sehir FROM Personel
UNION
SELECT Sehir FROM Musteriler;
çıktı:
Bu komut ile, her iki tablodaki şehir bilgileri birleştirilir ve tekrarlanan şehirler sadece bir
kez yer alır.
Özetle:
Avantajı: Farklı tablolardan gelen veriler tek bir sonuç kümesinde birleştirilir.
Dezavantajı: Tekrar eden veriler yok sayılır (veya UNION ALL kullanıldığında tam
tersi yalır).
Özetle JOIN Türleri Arasındaki Farklar:
INNER JOIN: Sadece eşleşen veriler döndürülür. Her iki tabloda da bulunan veri
alınır.
LEFT JOIN: Sol tablodaki tüm veriler alınır, sağ tablodan eşleşenler varsa getirilir.
Sağ tablodan eşleşmeyenler NULL olur.
RIGHT JOIN: Sağ tablodaki tüm veriler alınır, sol tablodan eşleşenler varsa
getirilir. Sol tablodan eşleşmeyenler NULL olur.
FULL OUTER JOIN: Her iki tablodan da tüm veriler ndürülür. Eşleşen kayıtlar
birleştirilir, eşleşmeyenler NULL olarak döner.
UNION: Birleştirilen iki veya daha fazla SELECT sorgusunun sonuçları
döndürülür, ancak tekrarlanan satırlar yalnızca bir kez alınır.
--- STRING-FONKSIYONLARI ---
Bu bölümde, SQL'deki bazı string fonksiyonları bulunmakta. İşte bu fonksiyonlar:
1. ASCII: Bir karakterin ASCII kodunu döndürür. Örneğin, 'A' karakterinin ASCII
değeri 65'tir.
2. CHAR: Bir sayıyı karaktere dönüştürür. Örneğin, 65 sayısı 'A' karakterine
dönüşür.
3. SUBSTRING: Bir dizgeden belirli bir bölüm alır.
4. REPLACE: Bir dizgedeki belirli bir metni başka bir metinle değiştirir.
5. CHARINDEX: Bir dizgedeki belirli bir alt dizgenin konumunu bulur.
6. CONCAT: İki veya daha fazla dizgeyi birleştirir.
7. CONCAT_WS: CONCAT ile benzer, ancak bir ayırıcı karakter (delimiter)
kullanarak dizgeleri birleştirir.
8. FORMAT: Verilen değeri belirtilen formata dönüştürür.
9. RTRIM: Sağ taraftaki boşlukları temizler.
10. LTRIM: Sol taraftaki boşlukları temizler.
11. TRIM: Dizgenin başındaki ve sonundaki boşlukları temizler.
12. LEFT: Bir dizgenin solundan belirtilen sayıda karakter alır.
13. RIGHT: Bir dizgenin sağından belirtilen sayıda karakter alır.
14. LEN: Dizgenin uzunluğunu döndürür.
15. LOWER: Dizgedeki tüm karakterleri küçük harfe dönüştürür.
16. UPPER: Dizgedeki tüm karakterleri büyük harfe dönüştürür.
17. REVERSE: Bir dizgeyi tersine çevirir.
18. REPLICATE: Bir dizgiyi belirtilen sayıda tekrarlar.
Bu fonksiyonlar genellikle metin verisi üzerinde çeşitli manipülasyonlar yapmak için
kullanılır ve SQL'deki veri işleme işlevselliğini artırır.
ÖRNEKLER:
Örnk:
SELECT ASCII ('A')
Çıktı:
'A' karakterinin ASCII değeri 65'tir.
Örnk:
SELECT CHAR (47)
Çıktı:
47 sayısı ' / ' karakterine dönüşür.
Örnk:
SELECT SUBSTRING ('İSTANBUL BELEDİYESİ',1,4)
Çıktı:
içerdeki yazının 1 den 4 kadar olan karakterleri alınmıştır
Örnk:
SELECT CHARINDEX ('N','KENT ÜNİVERSİTESİ')
Çıktı:
Bu örnekte 'N' harfi 'KENT ÜNİVERSİTESİ' metninde 3. pozisyonda
bulunuyor, dolayısıyla 3 çıktısını alıyoruz.
Örnk:
SELECT CONCAT ('İSTANBUL',' ','KENT',' ','ÜNİVERSİTESİ')
Çıktı:
' ' (tek tırnak içinde boşluk) bir boşluk karakteridir ve bu, metinler arasına
eklenir.
Bu örnekte: 'İSTANBUL', ' ', 'KENT', ' ', ve 'ÜNİVERSİTESİ' dizgeleri
birleştiriliyor.
Örnk:
SELECT CONCAT_WS(' ','KAĞITHANE','KENT','ÜNİVERSİTESİ')
Çıktı:
İlk parametre, ayırıcıdır (bu örnekte ' ' boşluk karakteri).
Geriye kalan parametreler ise birleştirilecek dizgelerdir ('KAĞITHANE', 'KENT',
'ÜNİVERSİTESİ').
' ' (boşluk) ayırıcı olarak kullanılır. ' ' (boşluk) karakterini en başa koyduğumuz
için CONCAT komutunun aksine her dizgi arasına boşluk koymamıza gerek
kalmaz. CONCAT_WS komutunda bunu en başta belirtmiş oluyoruz.
Örnk:
SELECT GETDATE()
Çıktı:
SELECT FORMAT(GETDATE(),'D','en-us') as ukformat
Çıktı:
FORMAT() fonksiyonu, tarih veya saat verisini belirli bir formata dönüştürmek
için kullanılır.
Bu sorgu çalıştırıldığında, geçerli tarih şu şekilde döner:
Thursday, April 10, 2025
Bu kısımda FORMAT komutuna odaklanmamız gerekiyor
GETDATE(): Geçerli tarih ve saat bilgisini döndürür.
FORMAT(): Tarih bilgisini istenilen formatta döndürür. Burada 'D' kullanımı,
günü, ayı ve yılı uzun formatta gösterir.
Örnk:
SELECT LEFT ('ÜNİVERSİTE',4)
Çıktı:
En Soldan 4 karakter alır
SELECT RIGHT ('ÜNİVERSİTE',2)
Çıktı:
En Sağdan 2 karakter alır
Örnk:
SELECT LEN ('ÜNİVERSİTE')
Çıktı:
LEN() fonksiyonu, verilen dizgenin karakter sayısını döndürür.
Bu örnekte, 'ÜNİVERSİTE' kelimesinin 10 karakterden oluştuğu için sonuç 10
olarak döner.
Örnk:
SELECT UPPER('lionel messi') --------> çıktı:
Dizideki karakterleri büyüttü
SELECT LOWER('ONEL MESSİ') --------> çıktı:
Dizideki karakterleri küçülttü
SELECT REVERSE('KENT ÜNİVERSİTESİ') --------> çıktı:
Diziyi tersine çevirdi
SELECT REPLICATE ('1',10) --------> çıktı:
Dizi içerisindeki 1 sayısını 10 defa tekrarlayarak ekrana getirdi
--- Stored Procedures ve SQL Transaction Yönetimi ---
Bu bölümde, Stored Procedure (Saklı Yordam) ve SQL Transaction şlem) konularını
ele alacağız. İşte her iki terim hakkında detaylı bilgiler:
Stored Procedure (Saklı Yordam)
Tanım: SQL veritabanlarında, önceden yazılmış ve saklanmış SQL komutlarıdır.
Tekrar tekrar çalıştırılması gereken sorgular için kullanılır.
Özellikler:
o Performansı artırır: Tekrar edilen işlemleri derleyip saklayarak veritabanı
sunucusunda tutar.
o Kod tekrarını azaltır: Aynı SQL komutlarını her seferinde yazmak yerine,
sadece saklı yordamı çağırabilirsiniz.
o Güvenliği artırır: Kullanıcıların doğrudan tablo üzerinde işlem yapmasını
engeller ve veri güvenliğini sağlar.
SQL Transaction (İşlem)
Tanım: Bir veya daha fazla SQL sorgusunun bir bütün olarak çalışması sağlar.
İşlemler ya başarılı olur ve kalıcı hale gelir, ya da bir hata durumunda tüm işlem
geri alınarak (ROLLBACK) sistemin tutarlılığı sağlanır.
Özellikler:
o ACID ilkelerine uyar:
Atomicity: Tüm işlemler ya tamamlanır ya da hiçbiri yapılmaz.
Consistency: Veritaba her zaman tutarlı bir durumda kalır.
Isolation: Paralel işlemler birbirini etkilemez.
Durability: İşlem tamamlandıktan sonra veriler kalıcı olarak
saklanır.
Transaction Kullanımı:
Genellikle INSERT, UPDATE ve DELETE işlemleri için kullanılır. Örneğin, veritabanına
veri eklerken veya ncellerken, tüm işlem başarılı olursa veriler kaydedilir. Eğer bir
hata olursa, tüm işlem geri alınır.